package Demo;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;

import java.util.List;

/**
 * @author Smilecode
 */
public class Command {
    @Parameter(names = {"?","-help"},description = "print help message",order = 3,help = true)
    Boolean helpFlag = false;      //判断是否是查看帮助的
    @Parameter(names = "-version", description = "print version and exit", order = 2)
    boolean versionFlag = false;   // 判断是否是查看版本的
    /**
     *  虚拟机加载类的方式与顺序如下：
     * 　Bootstrap classes，Extension classes，User classes。
     * Bootstrap classes 指定的是虚拟机自带的jar包
     * Extension是位于jre"lib"ext目录下的jar文件，虚拟机在搜索完Bootstrap后就搜索该目录下的jar文件。用System. getProperty("java.ext.dirs”)可得到虚拟机使用Extension搜索路径。
     * user Class 为搜索当前目录，环境变量classpath（cp）
     * 而这里的cp则是设置环境变量，指定user classes的保存位置
     */
    @Parameter(names = {"-cp", "-classpath"}, description = "classpath", order = 1)
    String classpath;              //保存classpath,用于指定用户包名。
    @Parameter(description = "main class and args")
    List<String> mainClassAndArgs; //保存要编译的类名及参数
    @Parameter(names = "-Xjre", description = "path to jre", order = 4)
    String jre;
    boolean ok = false;

    /**、
     * 获取运行的主类
     * @return 返回主类名称
     */
    public String getMainClass(){
        return mainClassAndArgs != null && !mainClassAndArgs.isEmpty()
                ? mainClassAndArgs.get(0)
                : null;
    }

    /**
     * 获取运行时的参数
     * @return 参数的List。
     */
    public List<String> getAppArgs(){
        return mainClassAndArgs != null && mainClassAndArgs.size() > 1
                ? mainClassAndArgs.subList(1, mainClassAndArgs.size())
                : null;
    }
    public static Command parse(String[] args){
        Command cmd = new Command();
        JCommander jCommander = JCommander.newBuilder().addObject(cmd).build();
        jCommander.parse(args);
        cmd.ok = true;
        return cmd;
    }
}
